<?php

class Cotizacion extends CI_Controller {
    const INT_OPC_REGISTRAR = 1;
    const INT_OPC_ACTUALIZAR = 2;
    const INT_OPC_ANULAR = 3;
    
    /**
     * Constructor
     * @author Fernando Esteban Valerio
     */
    function __construct() {
        parent::__construct();
        $this->load->model('cotizacion_model', '', true);
        $this->load->model('solicitud_model','',true);
        $this->load->model('moneda_model','',true);
        $this->load->model('marca_model','',true);
        $this->load->model('modelo_model','',true);
        $this->load->model('tipo_carroceria_model','',true);
        $this->load->model('repuesto_model','',true);
        $this->load->model('repuesto_x_solicitud_model','',true);
        $this->load->model('repuesto_x_cotizacion_model','',true);
        $this->load->model('taller_model','',true);
        $this->load->model('responsable_model','',true);
        $this->load->model('proveedor_model','',true);
        $this->load->model('estado_model','',true);
        $this->load->model('persona_juridica_model','',true);
        $this->load->model('persona_natural_model','',true);
        $this->load->helper('util');
    }

    /**
     * Metodo que muestra la bandeja de cotizaciones.
     * @author Fernando Esteban Valerio
     * @param int $resultado
     */
    public function index($resultado=0) {
        $sessionData = $this->session->userdata('logged_in');
        $tipoUsuario = $sessionData['tipo_usuario'];
        $idProveedor = 0;
        if ($tipoUsuario == INT_PROVEEDOR) {
            $idProveedor = $sessionData['id'];
        }
        $lstCotizacion = $this->cotizacion_model->getListCotizacionBandeja($idProveedor);

        $data = array(
            'lstCotizacion' => $lstCotizacion,
            'tamCodigo' => INT_TAM_CODIGO,
            'estadoPendResp' => INT_ESTADO_PEND_RESP,
            'estadoCotizada' => INT_ESTADO_COTIZADA,
            'estadoOGenerada' => INT_COT_ESTADO_ORDEN_GENERADA,
            'estadoAnulada' => INT_ESTADO_ANULADA
        );
        switch ($resultado) {
            case self::INT_OPC_REGISTRAR:
                $data['mensaje'] = "La operación se realizó satisfactoriamente";
                $data['class'] = "alert_success";
                break;

            case self::INT_OPC_ANULAR:
                $data['mensaje'] = "La operación se realizó satisfactoriamente";
                $data['class'] = "alert_success";
                break;
                
            default:
            	$data['mensaje'] = "La operacion se realizó satisfactoriamente";
            	$data['class'] = "alert_success";
        }
        $data['page_title'] = 'Bandeja de Cotizaciones';
        $this->load->view('cotizacion/cotizacion_view', $data);
    }

    /**
     * Metodo que realiza el seguimiento de la cotizacion.
     * @author Fernando Esteban Valerio
     * @version 1.0
     */
    public function seguir() {
        $sessionData = $this->session->userdata('logged_in');
        if ($sessionData != '') {
            $lstTipoCarroceria = $this->tipo_carroceria_model->getListTipoCarroceria();
            $lstMoneda = $this->moneda_model->getListMoneda();
            $lstMarca = $this->marca_model->getListMarca();
            $lstRepuesto = $this->repuesto_model->getListRepuesto();
            $lstTaller = $this->taller_model->getListTaller();
            $lstEstRepuesto = $this->estado_model->getListEstado('repuesto');
            $lstEstadoCotizacion = $this->estado_model->getListEstado('cotizacion');
            $lstAnho = listarAnho();

            // Tipo (Original / Alternativo)
            $lstTipo = array();
            $lstTipo['O'] = STR_INICIAL_ORIGINAL;
            $lstTipo['A'] = STR_INICIAL_ALTERNATIVO;

            // Entrega en Taller
            $lstEntrega = array();
            $lstEntrega[0] = STR_NO;
            $lstEntrega[1] = STR_SI;

            // Disponibilidad
            $lstDisponibilidad = array();
            $lstDisponibilidad[0] = STR_STOCK;
            for($iPosition=1;$iPosition<=INT_DISPONIBILIDAD;$iPosition++) {
                if ($iPosition == 1) {
                    $lstDisponibilidad[$iPosition] = $iPosition . STR_TXT_DIA;
                } else {
                    $lstDisponibilidad[$iPosition] = $iPosition . STR_TXT_DIAS;
                }
            }
            $tipoUsuario = $sessionData['tipo_usuario'];
            if ($tipoUsuario == INT_CLIENTE) {
                $data['page_title'] = 'Seguimiento de Solicitudes';
            } else if ($tipoUsuario == INT_PROVEEDOR) {
                $data['page_title'] = 'Seguimiento de Cotizaciones';
            }
            $data['codigo'] = '';
            $data['id'] = 0;
            $data['mensaje'] = '';
            $data['class'] = '';
            $data['soloLectura'] = true;
            $data['lectura'] = 'disabled="disabled"';
            $data['valorInicial'] = STR_VALOR_INICIAL;
            $data['opcion'] = 0;
            $data['lstMoneda'] = $lstMoneda;
            $data['lstMarca'] = $lstMarca;
            $data['lstTipoCarroceria'] = $lstTipoCarroceria;
            $data['lstTipoRepuesto'] = $lstRepuesto;
            $data['lstTipo'] = $lstTipo;
            $data['lstEntrega'] = $lstEntrega;
            $data['lstTaller'] = $lstTaller;
            $data['lstEstRepuesto'] = $lstEstRepuesto;
            $data['lstEstadoCotizacion'] = $lstEstadoCotizacion;
            $data['lstAnho'] = $lstAnho;
            $data['lstDisponibilidad'] = $lstDisponibilidad;
            $data['tituloO'] = STR_ORIGINAL;
            $data['tituloA'] = STR_ALTERNATIVO;
            $data['tipoUsuario'] = $tipoUsuario;
            $data['soloLecturaXEstado'] = '';

            $mensaje = '';
            if ($this->input->post()) {                
                $idSolicitud = filter_input(INPUT_POST, 'numCaso') * 1;
                $arrCotizaciones = array();
                if ($tipoUsuario == INT_CLIENTE) {
                    $idEstado = INT_SOL_ESTADO_ORDEN_GENERADA;
                    $arrCotizaciones = $this->solicitud_model->validarNumCaso($idSolicitud);
                    if (count($arrCotizaciones) > 0) {
                        $arrCotizaciones = $this->solicitud_model->validarNumCaso($idSolicitud, 0, $sessionData['id']);
                        if (count($arrCotizaciones) > 0) {
                            $arrCotizaciones = $this->solicitud_model->validarNumCaso($idSolicitud, $idEstado, $sessionData['id']);
                            if (count($arrCotizaciones) > 0) {                                
                                $mensaje = '';                                
                            } else {
                                $idEstado = INT_SOL_ESTADO_ENTREGADO;
                                $arrCotizaciones = $this->solicitud_model->validarNumCaso($idSolicitud, $idEstado, $sessionData['id']);
                                if (count($arrCotizaciones) > 0) {                                
                                    $mensaje = '';                                                                   
                                } else {                               
                                    $mensaje = 'El número de solicitud ingresado no está en estado Orden Generada o Entregado';
                                }
                            }
                        } else {
                            $mensaje = 'El número de solicitud ingresado no existe para su cuenta';
                        }
                    } else {
                        $mensaje = 'El número de solicitud ingresado no existe en el sistema';
                    }
                } else if ($tipoUsuario == INT_PROVEEDOR) {
                    $idEstado = INT_COT_ESTADO_ORDEN_GENERADA;
                    $arrCotizaciones = $this->cotizacion_model->validarNumCaso($idSolicitud);
                    if (count($arrCotizaciones) > 0) {
                        $arrCotizaciones = $this->cotizacion_model->validarNumCaso($idSolicitud, 0, $sessionData['id']);
                        if (count($arrCotizaciones) > 0) {
                            $arrCotizaciones = $this->cotizacion_model->validarNumCaso($idSolicitud, $idEstado, $sessionData['id']);
                            if (count($arrCotizaciones) > 0) {                                
                                $mensaje = '';
                            } else {
                                $idEstado = INT_COT_ESTADO_ENTREGADO;
                                $arrCotizaciones = $this->cotizacion_model->validarNumCaso($idSolicitud, $idEstado, $sessionData['id']);
                                if (count($arrCotizaciones) > 0) {                                
                                    $mensaje = '';
                                } else {
                                    $mensaje = 'El número de solicitud ingresado no está en estado Orden Generada o Entregado';
                                }
                            }
                        } else {
                            $mensaje = 'El número de solicitud ingresado no existe para su cuenta';
                        }
                    } else {
                        $mensaje = 'El número de solicitud ingresado no existe en el sistema';
                    }
                }
                $data['codigo'] = formatoNumCaso($idSolicitud);
                $data['soloLectura'] = true;
                $data['lectura'] = 'disabled="disabled"';

                if ($mensaje != '') {
                    $data['mensaje'] = $mensaje;
                    $data['class'] = "alert_warning";
                    $data['idSolicitud'] = $idSolicitud;
                    $data['lstRepuesto'] = NULL;
                } else {
                    $data['idSolicitud'] = $idSolicitud;

                    $objSolicitud = $this->solicitud_model->getSolicitud($idSolicitud);
                    $objModelo = $this->modelo_model->getModelo($objSolicitud[0]->id_modelo);
                    $lstModelo = $this->modelo_model->getListModelo($objModelo[0]->id_marca);

                    $data['objSolicitud'] = $objSolicitud;
                    $data['lstModelo'] = $lstModelo;
                    $data['objModelo'] = $objModelo;

                    $lstRepuesto = array();
                    $idEstado = INT_COT_ESTADO_ORDEN_GENERADA;
                    if ($tipoUsuario == INT_CLIENTE) {
                        $lstRepuesto = $this->repuesto_x_cotizacion_model->getListRepuestoXSeguimiento($idSolicitud);
                    } else if ($tipoUsuario == INT_PROVEEDOR) {
                        $idProveedor = $sessionData['id'];
                        $lstRepuesto = $this->repuesto_x_cotizacion_model->getListRepuestoXSeguimiento($idSolicitud, 0, $idProveedor);
                    }
                    $data['lstRepuesto'] = $lstRepuesto;
                }
            } else {
                $idSolicitud = filter_input(INPUT_GET, 'id');

                /* En caso se desea realizar el seguimiento haciendo clic en
                 * el nombre del estado
                 */
                if ($idSolicitud != '' && $idSolicitud > 0) {
                    $data['codigo'] = formatoNumCaso($idSolicitud);
                    $data['soloLectura'] = true;
                    $data['lectura'] = 'disabled="disabled"';
                    $data['idSolicitud'] = $idSolicitud;

                    $objSolicitud = $this->solicitud_model->getSolicitud($idSolicitud);
                    $objModelo = $this->modelo_model->getModelo($objSolicitud[0]->id_modelo);
                    $lstModelo = $this->modelo_model->getListModelo($objModelo[0]->id_marca);

                    $data['objSolicitud'] = $objSolicitud;
                    $data['lstModelo'] = $lstModelo;
                    $data['objModelo'] = $objModelo;

                    $lstRepuesto = array();
                    $idEstado = INT_COT_ESTADO_ORDEN_GENERADA;
                    if ($tipoUsuario == INT_CLIENTE) {
                        $lstRepuesto = $this->repuesto_x_cotizacion_model->getListRepuestoXSeguimiento($idSolicitud);
                    } else if ($tipoUsuario == INT_PROVEEDOR) {
                        $idProveedor = $sessionData['id'];
                        $lstRepuesto = $this->repuesto_x_cotizacion_model->getListRepuestoXSeguimiento($idSolicitud, 0, $idProveedor);
                    }
                    $data['lstRepuesto'] = $lstRepuesto;
                    $data['soloLecturaXEstado'] = 'disabled="disabled"';
                } else {
                    $data['idSolicitud'] = 0;
                    $data['idCotizacion'] = 0;
                    $data['objSolicitud'] = null;
                    $data['lstModelo'] = array();
                    $data['lstRepuesto'] = array();
                }
            }
            $this->load->view('cotizacion/cotizacion_trace_view', $data);
        } else {
            redirect(base_url() . 'index.php');
        }
    }

    /**
     * Metodo que realiza la cotizacion por parte del cliente.
     * @author Fernando Esteban Valerio
     * @version 1.0
     */
    public function ver() {
        $sessionData = $this->session->userdata('logged_in');
        if ($sessionData != '') {
            $data['page_title'] = 'Ver Cotizaciones';
            $data['mensaje'] = '';
            $data['class'] = '';
            $data['tituloO'] = STR_ORIGINAL;
            $data['tituloA'] = STR_ALTERNATIVO;
            $data['valorInicial'] = STR_VALOR_INICIAL;
            $data['simboloMoneda'] = '';
            if ($this->input->post() || $this->input->get()) {
                $opcion = '0';
                if ($this->input->post()) {
                    $opcion = filter_input(INPUT_POST, 'opcion');
                }
                if ($opcion == '0') {
                    $lstMoneda = $this->moneda_model->getListMoneda();
                    $lstMarca = $this->marca_model->getListMarca();
                    $lstTipoCarroceria = $this->tipo_carroceria_model->getListTipoCarroceria();
                    $lstAnho = listarAnho();

                    $idSolicitud = 0;
                    $idEstado = INT_ESTADO_COTIZADA;

                    // Proviene de la opcion "Ver Cotizacion"
                    if ($this->input->post()) {
                        $idSolicitud = filter_input(INPUT_POST, 'numCaso') * 1;
                    } else {
                        // Proviende de la opcion "Bandeja de Solicitudes"
                        if ($this->input->get()) {
                            $idSolicitud = filter_input(INPUT_GET, 'id') * 1;
                        }
                    }
                    $arrCotizaciones = $this->cotizacion_model->validarNumCaso($idSolicitud, $idEstado);
                    if (count($arrCotizaciones) > 0) {
                        // Deshacer seleccion de repuestos.
                        $dataSeleccion['seleccionado'] = 0;
                        $dataSeleccion['usuario_modificacion'] = $sessionData['id'];
                        $dataSeleccion['fecha_modificacion'] = date('Y-m-d H:i:s');
                        $dataSeleccion['id_solicitud'] = $idSolicitud;
                        $this->repuesto_x_cotizacion_model->deshacerSeleccion($dataSeleccion);

                        $objSolicitud = $this->solicitud_model->getSolicitud($idSolicitud);
                        $data['objSolicitud'] = $objSolicitud;
                        $data['codigo'] = formatoNumCaso($idSolicitud);
                        $data['soloLectura'] = true;
                        $data['lectura'] = 'disabled="disabled"';
                        $data['indLectura'] = 'disabled="disabled"';

                        $moneda = $objSolicitud[0]->id_moneda;
                        if ($moneda == INT_SOLES) {
                            $data['simboloMoneda'] = STR_SIMBOLO_SOLES;
                        } elseif ($moneda == INT_DOLARES) {
                             $data['simboloMoneda'] = STR_SIMBOLO_DOLARES;
                        }
                        
                        $idEstado = INT_ESTADO_COTIZADA;
                        $objMarca = $this->modelo_model->getModelo($objSolicitud[0]->id_modelo);
                        $lstModelo = $this->modelo_model->getListModelo($objMarca[0]->id_marca);
                        $numProveedoresInteresados = $this->cotizacion_model->getProveedoresInteresados($idSolicitud, $idEstado);
                        $lstRepuesto = $this->repuesto_x_solicitud_model->getListRepuestoXSolicitud($idSolicitud);

                        $data['objMarca'] = $objMarca;
                        $data['lstRepuesto'] = $lstRepuesto;
                        $data['valorInicial'] = STR_VALOR_INICIAL;
                        $data['idSolicitud'] = $idSolicitud;
                        $data['lstMarca'] = $lstMarca;
                        $data['lstTipoCarroceria'] = $lstTipoCarroceria;
                        $data['lstModelo'] = $lstModelo;
                        $data['lstMoneda'] = $lstMoneda;
                        $data['lstAnho'] = $lstAnho;
                        $data['numProveedoresInteresados'] = $numProveedoresInteresados[0]->total;

                        $arrCotizaciones = $arrProveedores = $arrMonto = array();

                        // Obtener las cotizaciones en estado COTIZADA asociadas a una solicitud
                        $lstCotizaciones = $this->cotizacion_model->getCotizacionCotizadas($idSolicitud, $idEstado);

                        $item = 0;
                        $lstCotizacion = $lstProveedores = '';
                        $arrProveedores = $arrRepuestos = array();
                        foreach ($lstCotizaciones as $dataCotizacion) {
                            $idCotizacion = $dataCotizacion->id_cotizacion;
                            $arrRepuestos[$dataCotizacion->id_usuario] = $this->repuesto_x_cotizacion_model->getListRepuestoXCotizacion($idCotizacion, 1);
                            if ($item++ < count($lstCotizaciones) - 1) {
                                $lstCotizacion .= $dataCotizacion->id_cotizacion . ',';
                                $lstProveedores .= $dataCotizacion->id_usuario . ',';
                            } else {
                                $lstCotizacion .= $dataCotizacion->id_cotizacion;
                                $lstProveedores .= $dataCotizacion->id_usuario;
                            }
                            $arrProveedores[] = $dataCotizacion->id_usuario;
                        }

                        // Obtener monto total por proveedor
                        $item = 0;
                        $lstMontoXProveedor = '';
                        foreach ($arrProveedores as $key=>$idProveedor) {
                            $montoTotal = $this->repuesto_x_cotizacion_model->getMontoTotalXProveedor($idSolicitud, $idProveedor);
                            if ($item++ < count($arrProveedores) - 1) {
                                if ($moneda == INT_SOLES) {
                                    $lstMontoXProveedor .= $idProveedor . '-' . STR_SIMBOLO_SOLES . number_format($montoTotal[0]->total, 2) . ',';
                                } elseif ($moneda == INT_DOLARES) {
                                    $lstMontoXProveedor .= $idProveedor . '-' . STR_SIMBOLO_DOLARES . number_format($montoTotal[0]->total, 2) . ',';
                                }
                            } else {
                                if ($moneda == INT_SOLES) {
                                    $lstMontoXProveedor .= $idProveedor . '-' . STR_SIMBOLO_SOLES . number_format($montoTotal[0]->total, 2);
                                } elseif ($moneda == INT_DOLARES) {
                                    $lstMontoXProveedor .= $idProveedor . '-' . STR_SIMBOLO_DOLARES . number_format($montoTotal[0]->total, 2);
                                }
                            }
                        }
                        $data['lstMontoXProveedor'] = $lstMontoXProveedor;

                        $arrPrecio = $arrStock = $arrPrecioStock = array();
                        foreach ($lstRepuesto as $dataRepuesto) {
                            $idRepuesto = $dataRepuesto->id_repuesto;
                            $lstDetalle = $this->repuesto_x_cotizacion_model->getRepuestoXCotizacion($lstCotizacion, $idRepuesto);
                            $item = $stock = $monto = $montoStock = 0;
                            $arrTmpPrecio = $arrTmpStock = $arrTmpPrecioStock = array();
                            $idRepuestoXCotizacionMonto = $idRepuestoXCotizacionStock = $idRepuestoXCotizacionPrecioStock = 0;
                            foreach ($lstDetalle as $dataDetalle) {
                                $id = $dataDetalle->id_cotizacion_repuesto_solicitud;
                                $valorMonto = $dataDetalle->precio;
                                $valorStock = $dataDetalle->disponibilidad;
                                if ($item == 0) {
                                    $monto = $valorMonto;
                                    $stock = $valorStock;
                                    $montoStock = $valorStock;
                                    $arrTmpPrecio[$id] = $arrTmpStock[$id] = $arrTmpPrecioStock = $idRepuesto;
                                    $idRepuestoXCotizacionStock = $idRepuestoXCotizacionMonto = $idRepuestoXCotizacionPrecioStock = $id;
                                } else {
                                    // Stock
                                    if ($valorStock <= $stock) {
                                        $stock = $valorStock;
                                        $arrTmpStock = array();
                                        $arrTmpStock[$id] = $idRepuesto;
                                        $idRepuestoXCotizacionStock = $id;
                                    }
                                    // Precio / Stock
                                    if ($valorStock <= $montoStock && $valorMonto < $monto) {
                                        $montoStock = $valorStock;
                                        $arrTmpPrecioStock = array();
                                        $arrTmpPrecioStock[$id] = $idRepuesto;
                                        $idRepuestoXCotizacionPrecioStock = $id;
                                    }
                                    // Precio
                                    if ($valorMonto < $monto) {
                                        $monto = $valorMonto;
                                        $arrTmpPrecio = array();
                                        $arrTmpPrecio[$id] = $idRepuesto;
                                        $idRepuestoXCotizacionMonto = $id;
                                    }
                                }
                                $item++;
                            }
                            $arrPrecio[$idRepuestoXCotizacionMonto] = $idRepuesto;
                            $arrStock[$idRepuestoXCotizacionStock] = $idRepuesto;
                            $arrPrecioStock[$idRepuestoXCotizacionPrecioStock] = $idRepuesto;
                        }
                        $data['txtProveedores'] = $lstProveedores;
                        $data['lstProveedores'] = $arrProveedores;
                        $data['lstRepuestosXProveedor'] = $arrRepuestos;

                        /*
                         * Mapear los ids de los repuestos que son identificados
                         * por cada tipo de marcado (Precio, Stock, Precio/Stock))
                         */
                        $txtRepXPrecio = '';
                        foreach ($arrPrecio as $key=>$idRepuesto) {
                            $txtRepXPrecio .= $key . ',';
                        }
                        $txtRepXStock = '';
                        foreach ($arrStock as $key=>$idRepuesto) {
                            $txtRepXStock .= $key . ',';
                        }
                        $txtRepXPrecioStock  = '';
                        foreach ($arrPrecioStock as $key=>$idRepuesto) {
                            $txtRepXPrecioStock .= $key . ',';
                        }
                        $data['txtRepXPrecio'] = substr($txtRepXPrecio, 0, strlen($txtRepXPrecio) - 1);
                        $data['txtRepXStock'] = substr($txtRepXStock, 0, strlen($txtRepXStock) - 1);
                        $data['txtRepXPrecioStock'] = substr($txtRepXPrecioStock, 0, strlen($txtRepXPrecioStock) - 1);
                        $data['lstRepuestosSel'] = $data['txtRepXPrecio'] . '/' . $data['txtRepXStock'] . '/' . $data['txtRepXPrecioStock'];

                        /* Obtener los ids asociados a los repuestos de una cotizacion para un
                         * proveedor determinado, se muestra como una cadena de texto separado
                         * por comas
                         */
                        $txtIdRepuestoXCotizacion = '';
                        foreach($arrRepuestos as $key=>$dataRepuestoTmp) {
                            $numRegistros = count($dataRepuestoTmp);
                            for ($i=0;$i<$numRegistros;$i++) {
                                $txtIdRepuestoXCotizacion .= $dataRepuestoTmp[$i]->id . ',';
                            }
                        }
                        $data['txtIdRepuestoXCotizacion'] = substr($txtIdRepuestoXCotizacion, 0, strlen($txtIdRepuestoXCotizacion) - 1);

                        // Para mostrar el precio para la opcion Mejor Orden por Precio Armado
                        $lstValores = '';
                        $item = 0;
                        $data['arrPrecio'] = $arrPrecio;
                        foreach ($arrPrecio as $key=>$valor) {
                            if ($item < count($arrPrecio) - 1) {
                                $lstValores .= $key . ',';
                            } else {
                                $lstValores .= $key;
                            }
                            $item++;
                        }
                        $montoTotal = $this->repuesto_x_cotizacion_model->getMontoTotal($lstValores);
                        $data['montoTotalXPrecio'] = $montoTotal[0]->total;

                        // Para mostrar el precio para la opcion Mejor Orden por Proveedor
                        $lstValores = '';
                        $item = 0;
                        $data['arrStock'] = $arrStock;
                        foreach ($arrStock as $key=>$valor) {
                            if ($item < count($arrStock) - 1) {
                                $lstValores .= $key . ',';
                            } else {
                                $lstValores .= $key;
                            }
                            $item++;
                        }
                        $montoTotal = $this->repuesto_x_cotizacion_model->getMontoTotal($lstValores);
                        $data['montoTotalXStock'] = $montoTotal[0]->total;

                        // Para mostrar los proveedores por precio/stock
                        $lstValores = '';
                        $item = 0;
                        $data['arrPrecioStock'] = $arrPrecioStock;
                        foreach ($arrPrecioStock as $key=>$valor) {
                            if ($item < count($arrPrecioStock) - 1) {
                                $lstValores .= $key . ',';
                            } else {
                                $lstValores .= $key;
                            }
                            $item++;
                        }
                        $montoTotal = $this->repuesto_x_cotizacion_model->getMontoTotal($lstValores);
                        $data['montoTotalXPrecioStock'] = $montoTotal[0]->total;
                    } else {
                        $data['mensaje'] = 'La solicitud no está cotizada';
                        $data['class'] = 'alert_warning';
                        $data['codigo'] = '';
                        $data['soloLectura'] = true;
                        $data['lectura'] = 'disabled="disabled"';
                        $data['indLectura'] = '';
                        $data['idSolicitud'] = 0;
                        $data['objSolicitud'] = null;
                        $data['lstMarca'] = array();
                        $data['lstTipoCarroceria'] = array();
                        $data['lstModelo'] = array();
                        $data['lstMoneda'] = array();
                        $data['lstAnho'] = array();
                        $data['lstRepuesto'] = array();
                        $data['numProveedoresInteresados'] = 0;
                        $data['montoTotalXPrecio'] = '';
                        $data['montoTotalXStock'] = '';
                        $data['montoTotalXPrecioStock'] = '';
                        $data['txtProveedores'] = '';
                        $data['txtIdRepuestoXCotizacion'] = '';
                        $data['lstMontoXProveedor'] = '';
                        $data['txtRepXPrecio'] = '';
                        $data['txtRepXStock'] = '';
                        $data['txtRepXPrecioStock'] = '';
                        $data['lstRepuestosSel'] = '';
                    }
                } else {
                    $data['codigo'] = '';
                    $data['mensaje'] = 'La operación se realizó satisfactoriamente';
                    $data['class'] = 'alert_success';
                    $data['soloLectura'] = false;
                    $data['lectura'] = 'disabled="disabled"';
                    $data['indLectura'] = '';
                    $data['idSolicitud'] = 0;
                    $data['objSolicitud'] = null;
                    $data['lstMarca'] = array();
                    $data['lstTipoCarroceria'] = array();
                    $data['lstModelo'] = array();
                    $data['lstMoneda'] = array();
                    $data['lstAnho'] = array();
                    $data['lstRepuesto'] = array();
                    $data['numProveedoresInteresados'] = 0;
                    $data['montoTotalXPrecio'] = '';
                    $data['montoTotalXStock'] = '';
                    $data['montoTotalXPrecioStock'] = '';
                    $data['txtProveedores'] = '';
                    $data['txtIdRepuestoXCotizacion'] = '';
                    $data['lstMontoXProveedor'] = '';
                    $data['txtRepXPrecio'] = '';
                    $data['txtRepXStock'] = '';
                    $data['txtRepXPrecioStock'] = '';
                    $data['lstRepuestosSel'] = '';
                }
            } else {
                $data['codigo'] = '';
                $data['mensaje'] = '';
                $data['class'] = '';
                $data['soloLectura'] = false;
                $data['lectura'] = 'disabled="disabled"';
                $data['indLectura'] = '';
                $data['idSolicitud'] = 0;
                $data['objSolicitud'] = null;
                $data['lstMarca'] = array();
                $data['lstTipoCarroceria'] = array();
                $data['lstModelo'] = array();
                $data['lstMoneda'] = array();
                $data['lstAnho'] = array();
                $data['lstRepuesto'] = array();
                $data['numProveedoresInteresados'] = 0;
                $data['montoTotalXPrecio'] = '';
                $data['montoTotalXStock'] = '';
                $data['montoTotalXPrecioStock'] = '';
                $data['txtProveedores'] = '';
                $data['txtIdRepuestoXCotizacion'] = '';
                $data['lstMontoXProveedor'] = '';
                $data['txtRepXPrecio'] = '';
                $data['txtRepXStock'] = '';
                $data['txtRepXPrecioStock'] = '';
                $data['lstRepuestosSel'] = '';
                $data['lstRepuestosXProveedor'] = array();
                $data['lstProveedores'] = array();
            }        
            $this->load->view('cotizacion/cotizacion_see_view', $data);
        } else {
            redirect(base_url() . 'index.php');
        }
    }

    /*
     * Metodo que marca los repuestos cotizados por el cliente
     * @author Fernando Esteban Valerio
     */
    public function regRepuestoXCotizacion() {
        $lstRepuestosSel = filter_input(INPUT_POST, 'lstRepuestosSel');
        $opcionSel = filter_input(INPUT_POST, 'opcionSel');
        $sessionData = $this->session->userdata('logged_in');
        if ($lstRepuestosSel != '' && $opcionSel!= '') {
            // Opcion: Mejor Orden por Precio Armado
            if ($opcionSel == '1') {
                $arrRepuestosSel = explode('/', $lstRepuestosSel);
                if (count($arrRepuestosSel) == 3) {
                    $lstRepuestos = $arrRepuestosSel[0];
                    if ($lstRepuestos != '') {
                        $arrRepuestosTmp = explode(',', $lstRepuestos);
                        if (count($arrRepuestosTmp) > 0) {
                            for($posicion=0;$posicion<count($arrRepuestosTmp);$posicion++) {
                                $data['seleccionado'] = 1;
                                $data['usuario_modificacion'] = $sessionData['id'];
                                $data['fecha_modificacion'] = date('Y-m-d H:i:s');
                                $data['id_cotizacion_repuesto_solicitud'] = $arrRepuestosTmp[$posicion];
                                $this->repuesto_x_cotizacion_model->updateRepuestoXCliente($data);
                            }
                        }
                    }
                }
            }
            // Opcion: Mejor Orden por Stock
            if ($opcionSel == '2') {
                $arrRepuestosSel = explode('/', $lstRepuestosSel);
                if (count($arrRepuestosSel) == 3) {
                    $lstRepuestos = $arrRepuestosSel[1];
                    if ($lstRepuestos != '') {
                        $arrRepuestosTmp = explode(',', $lstRepuestos);
                        if (count($arrRepuestosTmp) > 0) {
                            for ($posicion=0;$posicion<count($arrRepuestosTmp);$posicion++) {
                                $data['seleccionado'] = 1;
                                $data['usuario_modificacion'] = $sessionData['id'];
                                $data['fecha_modificacion'] = date('Y-m-d H:i:s');
                                $data['id_cotizacion_repuesto_solicitud'] = $arrRepuestosTmp[$posicion];
                                $this->repuesto_x_cotizacion_model->updateRepuestoXCliente($data);
                            }
                        }
                    }
                }
            }
            // Opcion: Mejor Orden por Precio Armado y Stock
            if ($opcionSel == '3') {
                $arrRepuestosSel = explode('/', $lstRepuestosSel);
                if (count($arrRepuestosSel) == 3) {
                    $lstRepuestos = $arrRepuestosSel[2];
                    if ($lstRepuestos != '') {
                        $arrRepuestosTmp = explode(',', $lstRepuestos);
                        if (count($arrRepuestosTmp) > 0) {
                            for ($posicion=0;$posicion<count($arrRepuestosTmp);$posicion++) {
                                $data['seleccionado'] = 1;
                                $data['usuario_modificacion'] = $sessionData['id'];
                                $data['fecha_modificacion'] = date('Y-m-d H:i:s');
                                $data['id_cotizacion_repuesto_solicitud'] = $arrRepuestosTmp[$posicion];
                                $this->repuesto_x_cotizacion_model->updateRepuestoXCliente($data);
                            }
                        }
                    }
                }
            }
            // Opcion: Seleccionar Proveedor
            if ($opcionSel == '4') {
                $arrRepuestosSel = explode('/', $lstRepuestosSel);
                if (count($arrRepuestosSel) == 3) {
                    $lstRepuestos = $arrRepuestosSel[0];
                    if ($lstRepuestos != '') {
                        $arrRepuestosTmp = explode(',', $lstRepuestos);
                        if (count($arrRepuestosTmp) > 0) {
                            for ($posicion=0;$posicion<count($arrRepuestosTmp);$posicion++) {
                                $data['seleccionado'] = 1;
                                $data['usuario_modificacion'] = $sessionData['id'];
                                $data['fecha_modificacion'] = date('Y-m-d H:i:s');
                                $data['id_cotizacion_repuesto_solicitud'] = $arrRepuestosTmp[$posicion];
                                $this->repuesto_x_cotizacion_model->updateRepuestoXCliente($data);
                            }
                        }
                    }
                }
            }
            if ($opcionSel == '5') {
                $lstRepuestosSel = substr($lstRepuestosSel, 0, strlen($lstRepuestosSel) - 1);
                $arrRepuestosSel = explode(',', $lstRepuestosSel);
                if (count($arrRepuestosSel) > 0) {
                    for ($posicion=0;$posicion<count($arrRepuestosSel);$posicion++) {
                        $data['seleccionado'] = 1;
                        $data['usuario_modificacion'] = $sessionData['id'];
                        $data['fecha_modificacion'] = date('Y-m-d H:i:s');
                        $data['id_cotizacion_repuesto_solicitud'] = $arrRepuestosSel[$posicion];
                        $this->repuesto_x_cotizacion_model->updateRepuestoXCliente($data);
                    }
                }
            }
            echo 'ok';
        }
    }

    /**
     * Metodo que valida la existencia de la solicitud para un proveedor.
     * @author Fernando Esteban Valerio
     */
    public function validarNumSolicitud() {
        $mensaje = '';
        if ($this->input->is_ajax_request() && $this->input->post('idSolicitud')) {
            $sessionData = $this->session->userdata('logged_in');
            $idSolicitud = filter_input(INPUT_POST, 'idSolicitud') * 1;
            $idEstado = INT_ESTADO_PEND_RESP;             
            $arrCotizaciones = $this->cotizacion_model->validarNumCaso($idSolicitud);
            if (count($arrCotizaciones) > 0) {
                $arrCotizaciones = $this->cotizacion_model->validarNumCaso($idSolicitud, 0, $sessionData['id']);
                if (count($arrCotizaciones) > 0) {
                    $arrCotizaciones = $this->cotizacion_model->validarNumCaso($idSolicitud, $idEstado, $sessionData['id']);
                    if (count($arrCotizaciones) > 0) {
                        $idCotizacion = $arrCotizaciones[0]->id_cotizacion;
                        $mensaje = $idCotizacion;
                    } else {
                        $mensaje = 'El número de solicitud ingresado no está en estado Pendiente de Repuesta';
                    }
                } else {
                    $mensaje = 'El número de solicitud ingresado no existe para su cuenta';
                }
            } else {
                $mensaje = 'El número de solicitud ingresado no existe en el sistema';
            }            
        } else {
            $mensaje = 'Ocurrio un error, comunicarse con el Administrador';
        }
        echo $mensaje;
    }

    /**
     * Metodo que realiza la cotización por parte del proveedor.
     * @author Fernando Esteban Valerio
     */
    public function cotizar() {
        $sessionData = $this->session->userdata('logged_in');
        if ($sessionData != '') {            
            if ($this->input->post()) {
                $numRepActualizados = 0;
                $numFilas = filter_input(INPUT_POST, 'numFilas');
                $meGusta = filter_input(INPUT_POST, 'meGusta');
                if ($numFilas > 0) {
                    // Inicializar la transaccion
                    $this->db->trans_begin();

                    for ($iPosition=0;$iPosition<$numFilas;$iPosition++) {
                        $dataRepuesto['monto'] = $_POST['monto'][$iPosition];
                        $dataRepuesto['disponibilidad'] = $_POST['disponibilidad'][$iPosition];
                        $dataRepuesto['fecha_entrega'] = formatoFecha($_POST['fecha'][$iPosition]);
                        $dataRepuesto['total'] = $_POST['monto'][$iPosition] * $_POST['cantidad'][$iPosition];
                        $dataRepuesto['id_repuesto'] = $_POST['idRepuesto'][$iPosition];
                        $dataRepuesto['id_solicitud'] = $_POST['idSolicitud'][$iPosition];
                        $dataRepuesto['id_cotizacion'] = $_POST['idCotizacion'][$iPosition];
                        $dataRepuesto['usuario_modificacion'] = $sessionData['id'];
                        $dataRepuesto['fecha_modificacion'] = date('Y-m-d H:i:s');
                        if ($dataRepuesto['monto'] != '' && $dataRepuesto['disponibilidad'] != '') {
                            $numRepActualizados++;
                            $this->repuesto_x_cotizacion_model->cotizar($dataRepuesto);
                        }
                    }
                    $idCotizacion = filter_input(INPUT_POST, 'id');
                    $objCotizacion = $this->cotizacion_model->getInfoClienteYProveedor($idCotizacion);
                    if ($objCotizacion[0]->me_gusta == 0) {
                        $dataCotizacion['me_gusta'] = $meGusta;
                        $dataCotizacion['id_cotizacion'] = $idCotizacion;
                        $dataCotizacion['usuario_modificacion'] = $sessionData['id'];
                        $dataCotizacion['fecha_modificacion'] = date('Y-m-d H:i:s');
                        $this->cotizacion_model->updateMeGusta($dataCotizacion);
                    }
                    $opcion = filter_input(INPUT_POST, 'opcion');
                    if ($opcion == '2') {
                        $codigo = formatoNumCaso($objCotizacion[0]->id_solicitud);
                        $correo = $objCotizacion[0]->correo;

                        $datosCliente = '';
                        $idPersona = $objCotizacion[0]->id_persona;
                        $tipoCliente = $objCotizacion[0]->id_tipo_cliente;
                        if ($tipoCliente == INT_CLIENTE_INDIVIDUAL) {
                            $objPersona = $this->persona_natural_model->getPersonaNatural($idPersona);
                            $datosCliente = trim($objPersona[0]->nombres . ' ' . $objPersona[0]->apellidos);
                        }
                        if ($tipoCliente == INT_CLIENTE_CORPORATIVO) {
                            $objPersona = $this->persona_juridica_model->getPersonaJuridica($idPersona);
                            $datosCliente = trim($objPersona[0]->razon_social);
                        }

                        $igv = $objCotizacion[0]->igv;
                        if ($igv == INT_SIN_IGV) {
                            $igv = ' y los precios No Incluye IGV';
                        } elseif ($igv == INT_CON_IGV) {
                            $igv = ' y los precios Incluye IGV';
                        }
                        
                        $moneda = $objCotizacion[0]->soles;
                        if ($moneda == INT_SOLES) {
                            $moneda = STR_TXT_SOLES;
                        } elseif ($moneda == INT_DOLARES) {
                            $moneda = STR_TXT_DOLARES;
                        }
                        
                        // Mensaje de Nueva Cotizacion
                        $titulo = 'Nueva Cotización';
                        $mensaje = "
                            <p style='text-align: justify'>Le informamos que existe una nueva Cotización en " . $moneda . $igv . " en respuesta al N° de Solicitud " . $codigo . ".</p>
                            <p style='text-align: justify'>Le sugerimos revisar su Bandeja de Solicitudes.</p>";
                        $this->mensaje($titulo, $correo, $datosCliente, $mensaje);

                        $dataCotizacion['estado'] = INT_ESTADO_COTIZADA;
                        $dataCotizacion['id_cotizacion'] = $idCotizacion;
                        $dataCotizacion['usuario_modificacion'] = $sessionData['id'];
                        $dataCotizacion['fecha_modificacion'] = date('Y-m-d H:i:s');
                        $this->cotizacion_model->updateEstado($dataCotizacion);

                        $dataSolicitud['id_estado'] = INT_ESTADO_CON_REPUESTA;
                        $dataSolicitud['id_solicitud'] = $objCotizacion[0]->id_solicitud;
                        $dataSolicitud['usuario_modificacion'] = $sessionData['id'];
                        $dataSolicitud['fecha_modificacion'] = date('Y-m-d H:i:s');
                        $this->solicitud_model->updateEstado($dataSolicitud);                        
                    }
                    if ($this->db->trans_status() == 0) {
                        $this->db->trans_rollback();
                    } else {
                        $this->db->trans_commit();
                    }
                    $this->index(self::INT_OPC_REGISTRAR);
                }            
            } else {
                $indLectura = filter_input(INPUT_GET, 'lectura');
                $idCotizacion = filter_input(INPUT_GET, 'id');
                if ($idCotizacion == '') {
                    $idCotizacion = 0;
                }
                $lstTipoCarroceria = $this->tipo_carroceria_model->getListTipoCarroceria();
                $lstMoneda = $this->moneda_model->getListMoneda();
                $lstMarca = $this->marca_model->getListMarca();
                $lstRepuesto = $this->repuesto_model->getListRepuesto();
                $lstTaller = $this->taller_model->getListTaller();
                $lstEstRepuesto = $this->estado_model->getListEstado('repuesto');
                $lstEstadoCotizacion = $this->estado_model->getListEstado('cotizacion');
                $lstAnho = listarAnho();

                // Tipo
                $lstTipo = array();
                $lstTipo['O'] = STR_INICIAL_ORIGINAL;
                $lstTipo['A'] = STR_INICIAL_ALTERNATIVO;

                // Entrega en taller
                $lstEntrega = array();
                $lstEntrega[0] = STR_NO;
                $lstEntrega[1] = STR_SI;

                // Disponibilidad de repuesto
                $lstDisponibilidad = array();
                $lstDisponibilidad[0] = STR_STOCK;
                for($iPosition=1;$iPosition<=INT_DISPONIBILIDAD;$iPosition++) {
                    if ($iPosition == 1) {
                        $lstDisponibilidad[$iPosition] = $iPosition . STR_TXT_DIA;
                    } else {
                        $lstDisponibilidad[$iPosition] = $iPosition . STR_TXT_DIAS;
                    }
                }
                $data = array(
                    'opcion' => 0,
                    'lstMoneda' => $lstMoneda,
                    'lstMarca' => $lstMarca,
                    'lstTipoCarroceria' => $lstTipoCarroceria,
                    'lstRepuesto' => $lstRepuesto,
                    'lstTipo' => $lstTipo,
                    'lstEntrega' => $lstEntrega,
                    'lstTaller' => $lstTaller,
                    'lstEstRepuesto' => $lstEstRepuesto,
                    'lstEstadoCotizacion' => $lstEstadoCotizacion,
                    'lstAnho' => $lstAnho,
                    'lstDisponibilidad' => $lstDisponibilidad,
                    'valorInicial' => STR_VALOR_INICIAL,
                    'tituloO' => STR_ORIGINAL,
                    'tituloA' => STR_ALTERNATIVO
                );
                $data['id'] = 0;
                $data['page_title'] = 'Cotizar';
                $data['indLectura'] = false;
                $data['soloLectura'] = false;
                $data['lecturaNumCaso'] = '';
                $data['lectura'] = '';
                $data['codigo'] = '';
                $data['mensaje'] = '';
                $data['class'] = '';
                $data['isAdmin'] = false;
                if ($sessionData['tipo_usuario'] == INT_ADMINISTRADOR) {
                    $data['isAdmin'] = true;
                }
                if ($idCotizacion > 0) {
                    $objCotizacion = $this->cotizacion_model->getCotizacion($idCotizacion);
                    $idSolicitud = $objCotizacion[0]->id_solicitud;
                    $data['idSolicitud'] = $idSolicitud;
                    $data['idCotizacion'] = $objCotizacion[0]->id_cotizacion;
                    if ($idSolicitud > 0) {
                        $objSolicitud = $this->solicitud_model->getSolicitud($idSolicitud);
                        $objMarca = $this->modelo_model->getModelo($objSolicitud[0]->id_modelo);
                        $lstModelo = $this->modelo_model->getListModelo($objMarca[0]->id_marca);

                        $data['objSolicitud'] = $objSolicitud;
                        $data['objMarca'] = $objMarca;
                        $data['lstModelo'] = $lstModelo;
                        $data['codigo'] = formatoNumCaso($idSolicitud);
                        $data['soloLectura'] = true;
                        $data['lectura'] = 'disabled="disabled"';
                        $data['lecturaNumCaso'] = 'disabled="disabled"';

                        $lstRepuesto = $this->repuesto_x_cotizacion_model->getListRepuestoXCotizacion($idCotizacion);
                        $data['lstRepuesto'] = $lstRepuesto;
                        $data['numFilas'] = count($lstRepuesto);
                        $data['meGusta'] = $objCotizacion[0]->me_gusta;
                    }
                } else {
                    $data['idSolicitud'] = 0;
                    $data['idCotizacion'] = 0;
                    $data['objSolicitud'] = null;
                    $data['lstModelo'] = array();
                    $data['soloLectura'] = true;
                    $data['lectura'] = 'disabled="disabled"';
                    $data['lecturaNumCaso'] = '';
                    $data['lstRepuesto'] = array();
                    $data['numFilas'] = 0;
                    $data['meGusta'] = 0;
                    $data['objSolicitud'] = null;
                    $data['indLectura'] = true;

                }
                if ($indLectura != '') {
                    $data['indLectura'] = true;
                }
                $this->load->view('cotizacion/cotizacion_quote_view', $data);
            }
        } else {
            redirect(base_url() . 'index.php');
        }
    }

    /**
     * Metodo que realiza el pago a los proveedores.
     * @author Fernando Esteban Valerio
     */
    public function pagar() {
        $sessionData = $this->session->userdata('logged_in');
        if ($this->input->get()) {
            $idSolicitud = filter_input(INPUT_GET, 'id');
            if ($idSolicitud == '') {
                $idSolicitud = 0;
            }
            $lstMarca = $this->marca_model->getListMarca();
            $lstTipoCarroceria = $this->tipo_carroceria_model->getListTipoCarroceria();
            $lstMoneda = $this->moneda_model->getListMoneda();
            $lstRepuestoSolicitud = $this->repuesto_model->getListRepuesto();
            $lstTaller = $this->taller_model->getListTaller();
            $lstEstRepuesto = $this->estado_model->getListEstado('repuesto');
            $lstEstadoCotizacion = $this->estado_model->getListEstado('cotizacion');
            $lstAnho = listarAnho();

            // Tipo
            $lstTipo = array();
            $lstTipo['O'] = STR_INICIAL_ORIGINAL;
            $lstTipo['A'] = STR_INICIAL_ALTERNATIVO;

            // Entrega en taller
            $lstEntrega = array();
            $lstEntrega[0] = STR_NO;
            $lstEntrega[1] = STR_SI;

            // Disponibilidad de repuesto
            $lstDisponibilidad = array();
            $lstDisponibilidad[0] = STR_STOCK;
            for ($iPosition=1;$iPosition<=INT_DISPONIBILIDAD;$iPosition++) {
                if ($iPosition == 1) {
                    $lstDisponibilidad[$iPosition] = $iPosition . STR_TXT_DIA;
                } else {
                    $lstDisponibilidad[$iPosition] = $iPosition . STR_TXT_DIAS;
                }
            }

            $data = array(
                'opcion' => 0,
                'lstMarca' => $lstMarca,
                'lstMoneda' => $lstMoneda,
                'lstTipoCarroceria' => $lstTipoCarroceria,
                'lstRepuestoSolicitud' => $lstRepuestoSolicitud,
                'lstTipo' => $lstTipo,
                'lstEntrega' => $lstEntrega,
                'lstTaller' => $lstTaller,
                'lstEstRepuesto' => $lstEstRepuesto,
                'lstEstadoCotizacion' => $lstEstadoCotizacion,
                'lstAnho' => $lstAnho,
                'lstDisponibilidad' => $lstDisponibilidad,
                'valorInicial' => STR_VALOR_INICIAL,
                'tituloO' => STR_ORIGINAL,
                'tituloA' => STR_ALTERNATIVO
            );
            $data['codigo'] = '';
            $data['indLectura'] = false;
            $data['soloLectura'] = false;
            $data['lectura'] = '';
            $data['page_title'] = 'Generar Orden Compra';
            $data['id'] = 0;
            $data['mensaje'] = '';
            $data['class'] = '';
            $data['objMarca'] = '';

            if ($idSolicitud > 0) {
                $data['idSolicitud'] = $idSolicitud;
                $objSolicitud = $this->solicitud_model->getSolicitud($idSolicitud);
                $objModelo = $this->modelo_model->getModelo($objSolicitud[0]->id_modelo);
                $objMarca = $this->marca_model->getMarca($objModelo[0]->id_marca);
                $lstModelo = $this->modelo_model->getListModelo($objMarca[0]->id_marca);
                
                $simboloMoneda = '';
                if ($objSolicitud[0]->id_moneda == INT_SOLES) {
                    $simboloMoneda = STR_SIMBOLO_SOLES;
                } else {
                    $simboloMoneda = STR_SIMBOLO_DOLARES;
                }
                $data['simboloMoneda'] = $simboloMoneda;
                $data['objSolicitud'] = $objSolicitud;
                $data['objMarca'] = $objMarca;
                $data['lstModelo'] = $lstModelo;                
                $data['codigo'] = formatoNumCaso($idSolicitud);
                $data['soloLectura'] = true;
                $data['lectura'] = 'disabled="disabled"';

                $lstIdRepuestoXCotizacion = '';
                $lstProveedoresAPagar = $this->cotizacion_model->getProveedoresAPagar($idSolicitud);
                $data['lstProveedoresAPagar'] = $lstProveedoresAPagar;

                $arrRepuesto = array();
                foreach ($lstProveedoresAPagar as $dataProveedor) {
                    $idProveedor = $dataProveedor->idProveedor;

                    $lstRepuestoXProveedor = $this->repuesto_x_cotizacion_model->getRepuestosAPagarXProveedor($idSolicitud, $idProveedor);
                    $arrRepuesto[$idProveedor] = $lstRepuestoXProveedor;
                }
                $data['lstRepuesto'] = $arrRepuesto;
            } else {
                $data['idSolicitud'] = 0;
                $data['idCotizacion'] = 0;
                $data['objSolicitud'] = null;
                $data['lstModelo'] = array();
                $data['soloLectura'] = true;
                $data['lectura'] = 'disabled="disabled"';
                $data['lstRepuesto'] = array();
            }
            $this->load->view('cotizacion/cotizacion_pay_view', $data);
        }
    }

    /**
     * Metodo que realiza el cambio de estado.
     * @author Fernando Esteban Valerio
     */
    public function cambiar() {
        $sessionData = $this->session->userdata('logged_in');
        if ($sessionData != '') {
            if ($this->input->post()) {
                $idSolicitud = filter_input(INPUT_POST, 'idSolicitud');
                $idCotizacion = filter_input(INPUT_POST, 'idCotizacion');
                $numFilas = filter_input(INPUT_POST, 'numFilas');
                $numRepEntregadoActual = filter_input(INPUT_POST, 'numRepEntregado');
                $numRepXProv = filter_input(INPUT_POST, 'numRepXProv');
                $numRepuestos = filter_input(INPUT_POST, 'numRepuesto');
                if ($numFilas > 0) {
                    // Inicializar la transaccion
                    $this->db->trans_begin();

                    $numRepEntregado = 0;
                    for ($iPosition=0;$iPosition<$numFilas;$iPosition++) {                        
                        if (isset($_POST['estRepuesto'][$iPosition]) && $_POST['estRepuesto'][$iPosition] != "") {
                            $dataRepuesto['id_estado'] = $_POST['estRepuesto'][$iPosition];
                            $dataRepuesto['comentario'] = $_POST['comentario'][$iPosition];                        
                            $dataRepuesto['usuario_modificacion'] = $sessionData['id'];
                            $dataRepuesto['fecha_modificacion'] = date('Y-m-d H:i:s');
                            $dataRepuesto['id_repuesto'] = $_POST['idRepuesto'][$iPosition];
                            $dataRepuesto['id_solicitud'] = $idSolicitud;
                            $this->repuesto_x_solicitud_model->updateEstado($dataRepuesto);
                            if ($dataRepuesto['id_estado'] == INT_ENTREGADO) {
                                $numRepEntregado++;
                            }
                        } else {
                            $numRepEntregado++;
                        }
                            
                    }
                    /* En caso el estado de los repuestos de una cotizacion esten
                     * en estado ENTREGADO
                     */                    
                    if ($numRepEntregado == $numRepXProv) {
                        $dataCotizacion['estado'] = INT_COT_ESTADO_ENTREGADO;
                        $dataCotizacion['usuario_modificacion'] = $sessionData['id'];
                        $dataCotizacion['fecha_modificacion'] = date('Y-m-d H:i:s');                        
                        $dataCotizacion['id_cotizacion'] = $idCotizacion;
                        $this->cotizacion_model->updateEstado($dataCotizacion);
                    }
                    $numRepEntregado += $numRepEntregadoActual;
                    if ($numRepEntregado == $numRepuestos) {
                        /* Actualizar el estado de la solicitud y cotizacion en
                         * el caso que todos los repuestos hayan sido entregados,
                         * caso contrario seguira en orden generada.
                         */
                        $dataSolicitud['id_estado'] = INT_SOL_ESTADO_ENTREGADO;
                        $dataSolicitud['usuario_modificacion'] = $sessionData['id'];
                        $dataSolicitud['fecha_modificacion'] = date('Y-m-d H:i:s');                        
                        $dataSolicitud['id_solicitud'] = $idSolicitud;
                        $this->solicitud_model->updateEstado($dataSolicitud);
                    }
                    if ($this->db->trans_status() == 0) {
                        $this->db->trans_rollback();
                    } else {
                        $this->db->trans_commit();
                    }
                    $objCotizacion = $this->cotizacion_model->getInfoClienteYProveedor($idCotizacion);
                    $codigo = formatoNumCaso($objCotizacion[0]->id_solicitud);
                    $correo = $objCotizacion[0]->correo;

                    $datosCliente = '';
                    $idPersona = $objCotizacion[0]->id_persona;
                    $tipoCliente = $objCotizacion[0]->id_tipo_cliente;
                    if ($tipoCliente == INT_CLIENTE_INDIVIDUAL) {
                        $objPersona = $this->persona_natural_model->getPersonaNatural($idPersona);
                        $datosCliente = trim($objPersona[0]->nombres . ' ' . $objPersona[0]->apellidos);
                    }
                    if ($tipoCliente == INT_CLIENTE_CORPORATIVO) {
                        $objPersona = $this->persona_juridica_model->getPersonaJuridica($idPersona);
                        $datosCliente = trim($objPersona[0]->razon_social);
                    }

                    $idPersonaProveedor = $objCotizacion[0]->id_persona_proveedor;                        
                    $objPersona = $this->persona_juridica_model->getPersonaJuridica($idPersonaProveedor);
                    $datosProveedor = trim($objPersona[0]->razon_social);
                    
                    $titulo = 'Cambio de Estado en Cotización';
                    $mensaje = "
                        <p style='text-align: justify'>Le informamos que " . $datosProveedor . " ha actualizado el estado de los repuestos para el N° de Solicitud " . $codigo . ".</p>
                        <p style='text-align: justify'>Le sugerimos revisar su Bandeja de Solicitudes.</p>";
                    $this->mensaje($titulo, $correo, $datosCliente, $mensaje);

                    $this->index(self::INT_OPC_REGISTRAR);
                }
            } else {
                $idCotizacion = filter_input(INPUT_GET, 'id');
                if ($idCotizacion == '') {
                    $idCotizacion = 0;
                }
                $lstTipoCarroceria = $this->tipo_carroceria_model->getListTipoCarroceria();
                $lstMoneda = $this->moneda_model->getListMoneda();
                $lstMarca = $this->marca_model->getListMarca();            
                $lstTaller = $this->taller_model->getListTaller();
                $lstEstRepuesto = $this->estado_model->getListEstado('repuesto');
                $lstEstadoCotizacion = $this->estado_model->getListEstado('cotizacion');
                $lstAnho = listarAnho();

                $lstTipo = array();
                $lstTipo['O'] = STR_INICIAL_ORIGINAL;
                $lstTipo['A'] = STR_INICIAL_ALTERNATIVO;

                $lstEntrega = array();
                $lstEntrega[0] = STR_NO;
                $lstEntrega[1] = STR_SI;

                $data = array(
                    'lstMoneda' => $lstMoneda,
                    'lstMarca' => $lstMarca,
                    'lstTipoCarroceria' => $lstTipoCarroceria,
                    'lstTipo' => $lstTipo,
                    'lstEntrega' => $lstEntrega,
                    'lstTaller' => $lstTaller,
                    'lstEstRepuesto' => $lstEstRepuesto,
                    'lstEstadoCotizacion' => $lstEstadoCotizacion,
                    'lstAnho' => $lstAnho,
                    'valorInicial' => STR_VALOR_INICIAL,
                    'tituloO' => STR_ORIGINAL,
                    'tituloA' => STR_ALTERNATIVO
                );
                $data['codigo'] = '';
                $data['soloLectura'] = false;
                $data['lectura'] = '';
                $data['page_title'] = 'Cambiar de Estado a Cotización';
                $data['id'] = 0;
                $data['mensaje'] = '';
                $data['class'] = '';

                if ($idCotizacion > 0) {
                    $objCotizacion = $this->cotizacion_model->getCotizacion($idCotizacion);
                    $idSolicitud = $objCotizacion[0]->id_solicitud;
                    $data['idSolicitud'] = $idSolicitud;
                    $data['idCotizacion'] = $objCotizacion[0]->id_cotizacion;
                    if ($idSolicitud > 0) {
                        $objSolicitud = $this->solicitud_model->getSolicitud($idSolicitud);
                        $objModelo = $this->modelo_model->getModelo($objSolicitud[0]->id_modelo);
                        $objMarca = $this->marca_model->getMarca($objModelo[0]->id_marca);
                        $lstModelo = $this->modelo_model->getListModelo($objModelo[0]->id_marca);

                        $data['objSolicitud'] = $objSolicitud;
                        $data['objMarca'] = $objMarca;
                        $data['lstModelo'] = $lstModelo;
                        $data['codigo'] = formatoNumCaso($idSolicitud);
                        $data['soloLectura'] = true;
                        $data['lectura'] = 'disabled="disabled"';

                        $lstRepuestoxProv = $this->repuesto_x_cotizacion_model->getListRepuestoXSeguimiento($idSolicitud, 0, $sessionData['id']);
                        
                        // Numero de repuestos de la cotizacion
                        $idEstado = INT_COT_ESTADO_ORDEN_GENERADA;                    
                        $lstRepuesto = $this->repuesto_x_cotizacion_model->getListRepuestoXSeguimiento($idSolicitud, $idEstado, $sessionData['id']);
                        
                        // Numero de repuestos en estado entregado
                        $idEstado = INT_ENTREGADO;
                        $lstRepEntregado = $this->repuesto_x_solicitud_model->getListRepuestoXSolicitud($idSolicitud, 0, $idEstado);
                        
                        // Numero de repuestos
                        $lstRepsSolicitud = $this->repuesto_x_solicitud_model->getListRepuestoXSolicitud($idSolicitud);
                        
                        $data['lstRepuesto'] = $lstRepuesto;
                        $data['numFilas'] = count($lstRepuesto);
                        $data['numRepEntregado'] = count($lstRepEntregado);
                        $data['numRepXProv'] = count($lstRepuestoxProv);
                        $data['numRepuesto'] = count($lstRepsSolicitud);
                    }
                } else {
                    $data['idSolicitud'] = 0;
                    $data['idCotizacion'] = 0;
                    $data['objSolicitud'] = null;
                    $data['objMarca'] = null;
                    $data['lstModelo'] = array();
                    $data['soloLectura'] = true;
                    $data['lectura'] = 'disabled="disabled"';
                    $data['lstRepuesto'] = array();
                    $data['numFilas'] = 0;
                    $data['numRepEntregado'] = 0;
                    $data['numRepXProv'] = 0;
                    $data['numRepuesto'] = 0;
                }
                $this->load->view('cotizacion/cotizacion_edit_view', $data);
            }
        } else {
            redirect(base_url() . 'index.php');
        }
    }

    /**
     * Metodo para enviar mensaje a cliente/proveedor
     * @author Fernando Esteban Valerio
     * @param string $titulo Titulo del correo
     * @param string $correo Correo del cliente
     * @param string $datosCliente Datos del cliente
     * @param string $mensaje Mensaje del correo
     */
    private function mensaje($titulo, $correo, $datosCliente, $mensaje) {
        $this->load->library('email');
        $this->email->from('tu_direccion@bizarq.com', 'Administrador');
        $this->email->to($correo);       

        $logo = "http://www.bizarq.com/ProyectoRespuestock/images/repuestock.png";
        $asunto = $titulo . " - Repuestock";
        $contenido = "
        <table border='0' width='800px'>
        <tr>
            <td style='height: 80px' colspan='3'><img src='" . $logo . "' border='0' width='225px' height='75px'></td>
        </tr>
        <tr>
            <td style='height: 10px' colspan='3'></td>
        </tr>
        <tr>
            <td style='vertical-align: top' colspan='3'>
            <table cellpadding='0' cellspacing='5' border='0' width='800' align='left'>
            <tr>
                <th colspan='3'style='font-weight: bold;'><h1><strong>" . $titulo . "</strong></h1></th>
            </tr>
            <tr>
                <td style='font-family:Arial; color:#333333; font-size:12px; text-align:justify' colspan='3'>
                Estimado(a) " . $datosCliente . $mensaje . "
                </td>
            </tr>
            </table>
        </tr>
        <tr>
            <td colspan='3' style='float: right'><a href='http://www.bizarq.com/ProyectoRespuestock'>www.repuestock.com.pe</a></td>
        </tr>
        </table>";
        $this->email->subject($asunto);
        $this->email->message($contenido);
        $this->email->send();
    }

    /**
     * Mostrar bandeja de cotizaciones para el perfil administrador.
     * @author Fernando Esteban Valerio
     */
    public function look() {
        $lstCotizacion = $this->cotizacion_model->getListCotizacion();
        $data = array(
            'lstCotizacion' => $lstCotizacion,
            'tamCodigo' => INT_TAM_CODIGO,
            'estadoPendResp' => INT_ESTADO_PEND_RESP,
            'estadoCotizada' => INT_ESTADO_COTIZADA,
            'estadoOGenerada' => INT_COT_ESTADO_ORDEN_GENERADA,
            'estadoAnulada' => INT_ESTADO_ANULADA
        );
        $data['page_title'] = 'Cotizaciones';
        $this->load->view('cotizacion/cotizacion_look_view', $data);
    }

    /**
     * Metodo para generar reporte de cotizaciones.
     * @author Leidy Uribe Marcos
     */
    public function reporte() {
        $lstCotizacion = $this->cotizacion_model->getCotizacionReporte();
        $data = array(
            'lstCotizacion' => $lstCotizacion,
            'tamCodigo' => INT_TAM_CODIGO,
            'estadoPendResp' => INT_ESTADO_PEND_RESP,
            'estadoCotizada' => INT_ESTADO_COTIZADA,
            'estadoOGenerada' => INT_COT_ESTADO_ORDEN_GENERADA,
            'estadoAnulada' => INT_ESTADO_ANULADA
        );
        $data['page_title'] = "Reporte de Cotización";
        $this->load->view('cotizacion/cotizacion_reporte', $data);
    }

    /**
     * Metodo para generar detalle de una cotización.
     * @author Leidy Uribe Marcos
     */
    public function detalle() {
        $data['page_title'] = "Detalle de Cotización";
        $data['mensaje'] = "Usted puede ver el detalle de la cotización seleccionada";
        $data['detalle'] = $this->cotizacion_model->getCotizacionReporteDetalle($_GET['id']);
        if (!empty($data['detalle'])){
        	foreach ($data['detalle'] as $det){
        		$data['id_solicitud'] = $det->id_solicitud;
        		$data['fecha_entrega'] = $det->fecha_entrega;
        	}
        	$this->load->view('cotizacion/cotizacion_detail', $data);
        }else {
        	echo "<script languaje='javascript'>alert('aun no se encuentra cotizacion disponible')</script>";
        	$this->reporte();
        }
        
    }
    
    /**
     * Metodo para ordernar de acuerdo al precio y stock (minimo y maximo).
     * @author Fernando Esteban Valerio
     */
    public function ordenarPrecioYStock() {
        $idSolicitud = filter_input(INPUT_POST, 'idSolicitud');
        $lstRepuestoXProv = filter_input(INPUT_POST, 'lstRepuestoXProv');
        $orden = filter_input(INPUT_POST, 'orden');
        $ordStock = filter_input(INPUT_POST, 'stock');
        $ordPrecio = filter_input(INPUT_POST, 'precio');
        $idEstado = INT_ESTADO_COTIZADA;
        
        // Obtener las cotizaciones en estado COTIZADA asociadas a una solicitud
        $lstCotizaciones = $this->cotizacion_model->getCotizacionCotizadas($idSolicitud, $idEstado);

        $item = 0;
        $lstProveedores = '';
        $arrProveedores = $arrRepuestos = array();
        foreach ($lstCotizaciones as $dataCotizacion) {
            $idCotizacion = $dataCotizacion->id_cotizacion;
            $arrRepuestos[$dataCotizacion->id_usuario] = $this->repuesto_x_cotizacion_model->getListRepuestoXCotizacion($idCotizacion, 1, $orden, $ordPrecio, $ordStock);
            if ($item++ < count($lstCotizaciones) - 1) {                
                $lstProveedores .= $dataCotizacion->id_usuario . ',';
            } else {
                $lstProveedores .= $dataCotizacion->id_usuario;
            }
            $arrProveedores[] = $dataCotizacion->id_usuario;
        }
        $lstProveedores = $arrProveedores;
        $lstRepuestosXProveedor = $arrRepuestos;
        
        $lstRepuestoXProv = substr($lstRepuestoXProv, 0, strlen($lstRepuestoXProv) - 1);
        $arrRepuestoXProv = explode(',', $lstRepuestoXProv);
        $arrRepuestoSel = array();
        for ($i=0;$i<count($arrRepuestoXProv);$i++) {
            $arrTmp = explode('-', $arrRepuestoXProv[$i]);
            $arrRepuestoSel[$arrTmp[0]] = $arrTmp[1];
        }

        $cadena = '';
        $puntero = 0;
        foreach ($lstProveedores as $key => $valor) {
            if ($puntero == 0) {
                $cadena .= '<tr>';
            }
            $puntero++;
            if ($puntero == 3) {
                $puntero = 0;
            }
            $cadena .= '<td style="padding-left: 10px; padding-right: 10px;">
                            <table style="width: 100%; font-size: 11px;">
                            <tr>
                                <th colspan="4" style="font-weight: bold;">Proveedor ' . ($key + 1) .'</th>
                            </tr>';                                                                       
            
            $filaData = '';
            $item = 1;
            foreach ($lstRepuestosXProveedor as $key=>$dataRepuesto) {
                $numRegistros = count($dataRepuesto);
                if ($key == $valor) {
                    for ($i = 0; $i < $numRegistros; $i++) {
                        $disponibilidad = $dataRepuesto[$i]->disponibilidad;
                        if ($disponibilidad == '0') {
                            $disponibilidad = STR_STOCK;
                        } else {
                            if ($disponibilidad == '1') {
                                $disponibilidad .= STR_TXT_DIA;
                            } else {
                                $disponibilidad .= STR_TXT_DIAS;
                            }
                        }
                        $condicionSel = ' disabled="disabled"';
                        if (isset($arrRepuestoSel[$dataRepuesto[$i]->id_repuesto]) && $arrRepuestoSel[$dataRepuesto[$i]->id_repuesto] != '') {
                            if ($dataRepuesto[$i]->id == $arrRepuestoSel[$dataRepuesto[$i]->id_repuesto]) {
                                $condicionSel = ' checked="checked"';
                            } else {
                                $condicionSel = '';
                            }
                        }
                        $filaData .= '
                                    <tr>
                                        <td style="text-align: center; border: 1px solid #000000;">' . $dataRepuesto[$i]->nombre_repuesto . '</td>
                                        <td style="text-align: right; border: 1px solid #000000;">' . $dataRepuesto[$i]->monto . '</td>
                                        <td style="text-align: right; border: 1px solid #000000;">' . $disponibilidad . '</td>
                                        <td style="border: 1px solid #000000; width: 5%;">                                            
                                            <input type="checkbox" id="repuestoxproveedor_' . $dataRepuesto[$i]->id_repuesto . '_' . $valor . '" name="repuestoxproveedor_' . $dataRepuesto[$i]->id_repuesto . '_' . $valor . '" value="1"' . $condicionSel . '/>
                                            <script type="text/javascript">
                                                $("#repuestoxproveedor_' . $dataRepuesto[$i]->id_repuesto . '_' . $valor  . '").click(function() {
                                                    var labelSeleccionado = "#repuestoxproveedor_' . $dataRepuesto[$i]->id_repuesto . '_' . $valor . '";
                                                    var montoAnterior = $("#montoAnterior_' . $dataRepuesto[$i]->id_repuesto . '").val();
                                                    var montoActual = ' . $dataRepuesto[$i]->monto . ' * ' . $dataRepuesto[$i]->cantidad . ';
                                                    if ($(labelSeleccionado).is(":checked")) {
                                                        var totalActual = $("#totalOrden").val();
                                                        if (totalActual === "0.00") {
                                                            totalActual = (montoActual * 1);
                                                        } else {
                                                            totalActual = (totalActual * 1) + (montoActual * 1);
                                                        }
                                                        var total = (totalActual * 1) - (montoAnterior * 1);
                                                        $("#totalOrden").val(total.toFixed(2));
                                                        $("#montoAnterior_' . $dataRepuesto[$i]->id_repuesto . '").val(montoActual);
                                                        $("#repuestoSel_' . $dataRepuesto[$i]->id_repuesto . '").val("' . $dataRepuesto[$i]->id  . '");
                                                        labelSeleccionado = "repuestoxproveedor_' . $dataRepuesto[$i]->id_repuesto . '_' . $valor . '";
                                                        document.getElementById(labelSeleccionado).checked = true;

                                                        var diferencia = ($("#totalOrdenXPrecio").val() * 1) - ($("#totalOrden").val() * 1);
                                                        $("#diferenciaOrden").val(diferencia.toFixed(2));
                                                    } else {
                                                        var totalActual = $("#totalOrden").val();
                                                        var total = totalActual - (montoActual * 1);                                                                                            

                                                        $("#totalOrden").val(total.toFixed(2));
                                                        $("#montoAnterior_' . $dataRepuesto[$i]->id_repuesto . '").val("0.00");
                                                        $("#repuestoSel_' . $dataRepuesto[$i]->id_repuesto . '").val("");
                                                        labelSeleccionado = "repuestoxproveedor_' . $dataRepuesto[$i]->id_repuesto . '_' . $valor . '";                                                                                            
                                                        document.getElementById(labelSeleccionado).checked = false;

                                                        labelRepuestoSeleccionado = "repuestoCotizado_' . $dataRepuesto[$i]->id_repuesto  . '";
                                                        document.getElementById(labelRepuestoSeleccionado).checked = false;

                                                        var totalGeneral = ($("#totalOrdenXPrecio").val() * 1);
                                                        var diferencia = ($("#totalOrdenXPrecio").val() * 1) - ($("#totalOrden").val() * 1);
                                                        if (diferencia === totalGeneral) {
                                                            $("#diferenciaOrden").val("");
                                                        } else {
                                                            $("#diferenciaOrden").val(diferencia.toFixed(2));
                                                        }';
                            
                        $fila = '';
                        foreach ($lstProveedores as $valorProv) {
                            $fila .= '                  $("#repuestoxproveedor_' . $dataRepuesto[$i]->id_repuesto . '_' . $valorProv . '").attr("disabled", "disabled");';
                        }
                        $fila .= '                  }';
                        $filaData .= $fila;
                        
                        $fila = '';
                        foreach ($lstProveedores as $valorProv) {
                            $fila .= '              var label = "repuestoxproveedor_' . $dataRepuesto[$i]->id_repuesto . '_' . $valorProv . '";
                                                    if (label !== labelSeleccionado) {
                                                        document.getElementById(label).checked = false;
                                                    }';
                        }
                        $filaData .= $fila;
                        
                        $filaData .= '          });
                                            </script>
                                        </td>
                                    </tr>';
                    }
                }
            }
            $cadena .= $filaData;
            
            $cadena .= '
                            </table>
                        </td>';

            if ($puntero == 0) {
                $cadena .= '</tr>';
            }
        }
        echo $cadena;
    }
   
}
